package cn.com.maven.designpattern.singleton;

/**
 * 静态内部类模式
 * 这种形式兼顾饿汉式单例模式的内存浪费问题和 synchronized 的性能问题
 * 加载静态变量，方法，不包括这个静态内部类
 * 被外部类调用的时候内部类才会加载
 * @Author YongQiang
 * @Date 2021/5/18 10:42
 * @Version 1.0
 */
public class LazyInnerClassSingleton {

    public static LazyInnerClassSingleton getInstance(){
        return InnerClass.INSTANCE;
    }

    private static class InnerClass{
        private static LazyInnerClassSingleton INSTANCE = new LazyInnerClassSingleton();
    }

    /**
     * 防止反射创建
     */
    private LazyInnerClassSingleton(){
        if (InnerClass.INSTANCE != null){
            throw new RuntimeException("不允许创建多个实例");
        }
    }

    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            new Thread(() -> System.out.println(LazyInnerClassSingleton.getInstance())).start();
        }
    }
}
